using System;
using System.Diagnostics.CodeAnalysis;
using System.Diagnostics.Contracts;

namespace OpenWaves
{
    [ContractClassFor(typeof(Url))]
//    [SuppressMessage("Microsoft.Design", "CA1065:DoNotRaiseExceptionsInUnexpectedLocations")]
    public abstract class UrlContract : Url
    {
        private UrlContract(Uri uri) : base(uri)
        {
        }

        public override UrlPath Path
        {
            get
            {
                Contract.Ensures(Contract.Result<UrlPath>() != null);
                throw new NotImplementedException();
            }
        }

        public override UrlQueryCollection Query
        {
            get
            {
                Contract.Ensures(Contract.Result<UrlQueryCollection>() != null);
                throw new NotImplementedException();
            }
        }

        public override string Fragment
        {
            get
            {
                Contract.Ensures(Contract.Result<String>() != null);
                throw new NotImplementedException();
            }
        }

        protected override UrlBuilder CreateBuilder()
        {
            Contract.Ensures(Contract.Result<UrlBuilder>() != null);
            throw new NotImplementedException();
        }

        public override string ToUnescapedString()
        {
            Contract.Ensures(String.IsNullOrEmpty(Contract.Result<String>()) == false);
            throw new NotImplementedException();
        }

        public override AbsoluteUrl ResolveAgainst(AbsoluteUrl baseUrl)
        {
            Contract.Ensures(Contract.Result<AbsoluteUrl>() != null);
            throw new NotImplementedException();
        }

        protected override string ToUrlString()
        {
            Contract.Ensures(String.IsNullOrEmpty(Contract.Result<String>()) == false);
            throw new NotImplementedException();
        }
    }
}